package uds.geoloc;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Vector;

import uds.data.POI_Database;
import uds.data.POI_Entry;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
 
// RechercheActivity est l'activity qui permet de rechercher un bâtiment
public class RechercheActivity extends Activity implements TextWatcher {
    
	// Initialisation de variables nécessaires
	private EditText status;
	private POI_Database base_poi = new POI_Database(this);
 
	private ListView listeResultats = null ;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.recherche);
        
        // Ouverture de la base de données
        base_poi.open();
        // Initialisation des composants
        status = (EditText) findViewById(R.id.recherche_batiment);
        status.addTextChangedListener(this);
        
        listeResultats = (ListView) findViewById(R.id.list);  
    	Vector<String> exemple = new Vector<String>();
    	
    	ArrayList<POI_Entry> entries = base_poi.getPOI_EntryWithType("batiment"); // Récupération de la liste des bâtiments
    	for (POI_Entry entry : entries) {
    			exemple.add(entry.getName()) ; // Récupération du nom de tous les bâtiments
    	}
    	
    	// Implémentation du comparateur
    	Comparator<String> comperator = new Comparator<String>() {

    		@Override
    		public int compare(String object1, String object2) {
    		return object1.compareToIgnoreCase(object2);
    		}
    	};
    	
    	// Initialisation de la liste des noms de bâtiments
    	ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,exemple);
    	adapter.sort(comperator) ;
    	listeResultats.setAdapter(adapter);
    	
    	// Implémentation d'un OnItemClickListener sur la liste
    	listeResultats.setOnItemClickListener(new OnItemClickListener() {
			
    		@Override
         	public void onItemClick(AdapterView<?> a, View v, int position, long id){
				base_poi.open();
    			String tmp = (String) listeResultats.getItemAtPosition(position);
				
    			// Récupération du bâtiment sélectionné
				List<POI_Entry> tmpPOI = base_poi.getPOI_EntryWithType("batiment");
				Bundle tmpChoix = new Bundle();

				for(POI_Entry entry : tmpPOI){
					if(entry.getName().equals(tmp)){
						tmpChoix.putString("id", entry.getId()); // Stockage de son numéro dans la base
					}
				}
				
	    		Intent intent = new Intent(RechercheActivity.this, InfoActivity.class);
	    		
	    		intent.putExtras(tmpChoix);
	    		
	    		startActivity(intent);

				base_poi.close();
			}
    	});
    	
    	base_poi.close();

    }
    
    // Implémentation de la méthode post changement du texte
    @Override
    public void afterTextChanged(Editable editable) {
        POI_Database base_poi = new POI_Database(this);
        base_poi.open();
    	Vector<String> exemple = new Vector<String>();
    	    	
    	String texte_cherche = status.getText().toString() ;
    	    	
    	ArrayList<POI_Entry> entries = base_poi.getPOI_EntryWithType("batiment");
    	for (POI_Entry entry : entries) {
    		if(entry.getName().toLowerCase().contains(texte_cherche.toLowerCase())){ // Test des noms de bâtiments contenant texte_cherche 
    			exemple.add(entry.getName()) ; // Ajout dans la liste
    		}
    	}
    	base_poi.close();
    	
    	// Implémentation du comparateur
    	Comparator<String> comperator = new Comparator<String>() {

    		@Override
    		public int compare(String object1, String object2) {
    		return object1.compareToIgnoreCase(object2);
    		}
    	};
    	
    	// Mise à jour du spinner 
    	ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,exemple);
    	adapter.sort(comperator) ;
    	listeResultats.setAdapter(adapter);

    }
 
    @Override
    public void beforeTextChanged(CharSequence charSeq, int arg1, int arg2,int arg3) {
    	
    }
 
    @Override
    public void onTextChanged(CharSequence charSeq, int arg1, int arg2, int arg3) {
    	
    }
}